home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / oop_tp55.zip / LIST2_2.PAS < prev    next >
Pascal/Delphi Source File  |  1990-03-08  |  3KB  |  135 lines

  1. program Listing 2_2;
  2.  
  3. const
  4.  
  5. CumLaude = 3.2;
  6. FailingGPA   = 2.0;
  7.  
  8. type
  9.  
  10. SexType = (male, female);
  11. String20 = string[20];
  12.  
  13. NameRec = record
  14.        Last   : String20;
  15.        Middle : String20;
  16.        First  : String20;
  17.        end;
  18.  
  19. Person = object
  20.       Name  : NameRec;
  21.       Sex   : SexType;
  22.       Email : String20;
  23.       procedure Init( FName, MName, LName : String20;
  24.                 Gender : SexType;
  25.                 E_mail : String20 );
  26.       procedure SendMsg( f : string );
  27.       end;
  28.  
  29. Student = object(Person)
  30.        GPA : real;
  31.        procedure Init(FName, MName, LName : String20;
  32.                 Gender : SexType;
  33.                 E_mail : String20;
  34.                 GradePointAvg : real );
  35.        procedure PutGPA( NewGPA : real );
  36.        end;
  37.  
  38. Faculty = object(Person)
  39.        Title : String20;
  40.        procedure Init(FName, MName, LName : String20;
  41.                 Gender : SexType;
  42.                 E_mail, FTitle : String20 );
  43.        procedure SendMsg( Msg : string );
  44.        end;
  45.  
  46. procedure Person.Init( FName, MName, LName : String20;
  47.                Gender : SexType;
  48.                E_mail : String20 );
  49. begin
  50.      Name.First := FName;
  51.      Name.Middle := MName;
  52.      Name.Last := LName;
  53.      Sex := Gender;
  54.      Email := E_mail;
  55. end;
  56.  
  57. procedure Person.SendMsg( f : string );
  58. var
  59.      Title : string[3];
  60. begin
  61.      if Sex = male then
  62.           Title := 'Mr.'
  63.      else
  64.           Title := 'Ms.';
  65.      writeln( 'TO: ', Title, ' ', Name.Last );
  66.      writeln( 'ADDRESS: ', Email );
  67.      writeln( '-----------------------------------------');
  68.      writeln( f );
  69.      writeln;
  70. end;
  71.  
  72. procedure Student.Init( FName, MName, LName : String20;
  73.                Gender : SexType;
  74.                E_mail : String20;
  75.                GradePointAvg : real);
  76. begin
  77.      Person.Init( FName, MName, LName, Gender, E_mail );
  78.      PutGPA( GradePointAvg );
  79. end;
  80.  
  81. procedure Student.PutGPA( NewGPA : real );
  82. begin
  83.      GPA := NewGPA;
  84.      if GPA >= CumLaude then
  85.           SendMsg(
  86.            'Your GPA makes you eligible for the Dean''s List');
  87.      if GPA <= FailingGPA then
  88.           SendMsg(
  89.            'You are on academic probation owing to a low GPA.');
  90. end;
  91.  
  92. procedure Faculty.Init( FName, MName, LName : String20;
  93.                Gender : SexType;
  94.                E_mail, FTitle : String20 );
  95. begin
  96.      Person.Init( FName, MName, LName, Gender, E_mail );
  97.      Title := FTitle;
  98. end;
  99.  
  100. procedure Faculty.SendMsg( Msg : string );
  101. begin
  102.      writeln( 'TO: ', Title, ' ', Name.Last );
  103.      writeln( 'ADDRESS: ', Email );
  104.      writeln( '-----------------------------------------');
  105.      writeln( Msg );
  106.      writeln;
  107. end;
  108.  
  109. var
  110.  
  111.      JohnDoe : Student;
  112.      JaneDoe : Student;
  113.      NickGogol : Faculty;
  114.  
  115. begin
  116.  
  117.  
  118. JohnDoe.Init( 'John', 'A.', 'Doe',   male, 'EM987', 2.20);
  119. JaneDoe.Init( 'Jane', 'A.', 'Doe', female, 'EM789', 3.24 );
  120. NickGogol.Init( 'Nikolai', 'Vasilievich', 'Gogol',
  121.                    male, 'DS000', 'Professor' );
  122.  
  123. JohnDoe.SendMsg( 'Your library books are overdue.' );
  124. NickGogol.SendMsg(
  125.       'The books you ordered are at the bookstore.');
  126.  
  127. JohnDoe.PutGPA( 1.97 );
  128.  
  129. end.
  130.  
  131. { Listing 2-2 }
  132.  
  133.  
  134.  
  135.